import Scanner from './Scanner'
import nextTokens from './nestTokens'

/**
 * 将模板字符串变为tokens数组
 */
export default function parseTemplateToTokens(templateStr) {
  var tokens = []

  // 创建扫描器
  var scanner = new Scanner(templateStr)
  var words
  while (!scanner.eos()) {
    // 收集开始标记出现之前的文字
    words = scanner.scanUntil('{{')
    if (words != '') {
      // 存起来,去掉空格
      tokens.push(['text', words.replace(/\s{1,}(<)|(>)\s{1,}/g, '$1$2')])
    }

    // 过双大括号
    words = scanner.scan('{{')
    // 收集开始标记出现之前的文字
    words = scanner.scanUntil('}}')
    if (words != '') {
      // 这个words就是{{}}中间的东西,判断一下首字符
      if (words[0] == '#') {
        // 从下标为一得项开始存,因为下标为0的项是#
        tokens.push(['#', words.substring(1)])
      } else if (words[0] == '/') {
        // 从下标为一得项开始存,因为下标为0的项是/
        tokens.push(['/', words.substring(1)])
      } else {
        // 存起来
        tokens.push(['name', words])
      }
    }
    // 过双大括号
    words = scanner.scan('}}')
  }

  // 返回折叠收集的tokens
  return nextTokens(tokens)
}
